package co.edu.udea.iw.service.impl;

import java.sql.Time;
import java.util.Date;
import java.util.List;

import co.edu.udea.iw.dao.DispositivoDAO;
import co.edu.udea.iw.dao.SolicitudDAO;
import co.edu.udea.iw.dto.Dispositivo;
import co.edu.udea.iw.dto.Solicitud;
import co.edu.udea.iw.dto.Usuario;
import co.edu.udea.iw.exception.IWDaoException;
import co.edu.udea.iw.exception.IWServiceException;
import co.edu.udea.iw.service.InvesrigadorService;

/**
 * Clase que implementa (sobrescribe) los metodos del InvesrigadorService
 * 
 * @author Santiago Ruiz
 * @author Bladimir Velez
 *
 */
public class InvestigadorServiceImpl implements InvesrigadorService {

	private DispositivoDAO dispositivoDAO;

	private SolicitudDAO solicitudDAO;

	/**
	 * @return the dispositivoDAO
	 */
	public DispositivoDAO getDispositivoDAO() {
		return dispositivoDAO;
	}

	/**
	 * @param dispositivoDAO
	 *            the dispositivoDAO to set
	 */
	public void setDispositivoDAO(DispositivoDAO dispositivoDAO) {
		this.dispositivoDAO = dispositivoDAO;
	}

	/**
	 * @return the solicitudDAO
	 */
	public SolicitudDAO getSolicitudDAO() {
		return solicitudDAO;
	}

	/**
	 * @param solicitudDAO
	 *            the solicitudDAO to set
	 */
	public void setSolicitudDAO(SolicitudDAO solicitudDAO) {
		this.solicitudDAO = solicitudDAO;
	}

	@Override
	public Dispositivo consultarDispositivo(Integer idDispositivo)
			throws IWServiceException, IWDaoException {
		Dispositivo dispositivo = null;
		dispositivo = getDispositivoDAO().obtenerDispositivo(idDispositivo);

		if (dispositivo == null)
			throw new IWServiceException(
					"No hay ningun dispositivo con el id : " + idDispositivo);
		return dispositivo;
	}

	@Override
	public List<Dispositivo> consultarDispositivos() throws IWServiceException,
			IWDaoException {
		List<Dispositivo> dispositivos = null;
		dispositivos = getDispositivoDAO().obtenerDispositivos();

		if (dispositivos == null)
			throw new IWServiceException("No hay dispositivos");
		return dispositivos;
	}

	@Override
	public Solicitud consultarSolicitud(int idSolicitud)
			throws IWServiceException, IWDaoException {
		Solicitud solicitud = null;
		solicitud = getSolicitudDAO().obtenerSolicitud(idSolicitud);

		if (solicitud == null)
			throw new IWServiceException(
					"No hay ninguna solicitud con el id : " + idSolicitud);
		return solicitud;
	}

	@Override
	public List<Solicitud> consultarSolicitudes() throws IWServiceException,
			IWDaoException {
		List<Solicitud> solicitudes = null;
		solicitudes = getSolicitudDAO().obtenerSolicitudes();

		if (solicitudes == null)
			throw new IWServiceException("No hay solicitudes");
		return solicitudes;
	}

	@Override
	public void crearSolicitud(int idSolicitud, Date fechaSolicitud,
			Date fechaPrestamo, Time horaInicioPrestamo, Time horaFinPrestamo,
			int cantidad, Usuario usuario, Dispositivo dispositivo)
			throws IWServiceException, IWDaoException {
		Solicitud solicitud;
		solicitud = new Solicitud(idSolicitud, fechaSolicitud, fechaPrestamo,
				horaInicioPrestamo, horaFinPrestamo, cantidad, usuario,
				dispositivo);
		getSolicitudDAO().agregarSolicitud(solicitud);

	}

	@Override
	public void modificarrSolicitud(int idSolicitud, Date fechaSolicitud,
			Date fechaPrestamo, Time horaInicioPrestamo, Time horaFinPrestamo,
			int cantidad, Usuario usuario, Dispositivo dispositivo)
			throws IWServiceException, IWDaoException {
		Solicitud solicitud;
		solicitud = new Solicitud(idSolicitud, fechaSolicitud, fechaPrestamo,
				horaInicioPrestamo, horaFinPrestamo, cantidad, usuario,
				dispositivo);
		getSolicitudDAO().actualizarSolicitud(solicitud);

	}

	@Override
	public void eliminarSolicitud(int idSolicitud) throws IWServiceException,
			IWDaoException {
		Solicitud solicitud;
		solicitud = new Solicitud();
		solicitud.setIdSolicitud(idSolicitud);
		getSolicitudDAO().eliminarSolicitud(solicitud);

	}

}
